import type { SUPPORTED_PLATFORMS } from '../constants'

export type PlatformType = keyof typeof SUPPORTED_PLATFORMS
export type PlatformTypeValue = typeof SUPPORTED_PLATFORMS[keyof typeof SUPPORTED_PLATFORMS]

/**
 * 域名转换规则类型定义
 */
export interface HostnameConvertRule {
  // 匹配方法
  matchMethod: 'equals' | 'startsWith' | 'endsWith' | 'includes' | 'regex'
  // 匹配的目标值
  matchValue: string
  // 转换后的值
  convertTo: string
}

/**
 * 平台页面类型
 */
export type PlatformPageType = 'blog' | 'search' | 'article' | 'unknown'

/**
 * 平台元素选择器配置
 */
export interface IPlatformElements {
  // 通用容器选择器
  container?: string | (() => JQuery<HTMLElement>)

  // 博客特定元素
  blog?: {
    wrapper?: string | ((element: JQuery<HTMLElement>) => JQuery<HTMLElement>)
    title: string | ((element: JQuery<HTMLElement>) => JQuery<HTMLElement>)
    meta?: string | ((element: JQuery<HTMLElement>) => JQuery<HTMLElement>)
    content: string | ((element: JQuery<HTMLElement>) => JQuery<HTMLElement>)
  }

  // 搜索页特定元素
  search?: {
    input: string | (() => JQuery<HTMLElement>)
    results: string | (() => JQuery<HTMLElement>)
  }
}

/**
 * 平台配置接口
 */
export type PlatformConfigType = {
  [platformName in PlatformTypeValue]?: {
    type: PlatformPageType
    elements: IPlatformElements
  }
}

export interface RedirectRule {
  platform: PlatformTypeValue // 平台地址
  domain: string // 要匹配的域名
  paramName?: string // 包含目标URL的参数名
  transform?: (url: string) => string // 自定义转换函数
}
